From 5d9ba6096cd2847852ce931d51e428cc3745b6b6 Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Wed, 30 Jun 2004 09:52:59 +0000 Subject: [PATCH] bitkeeper revision 1.1034 (40e28d7bx0XoTn2USwCDCvPvUTLZjQ) Rename ext to lowlevel. --- .rootkeys | 12 +- tools/Make.defs | 4 +- tools/python/setup.py | 14 +- tools/python/xen/ext/xc/Makefile | 15 -- tools/python/xen/ext/xc/setup.py | 19 -- .../python/xen/{ext => lowlevel}/__init__.py | 0 tools/python/xen/{ext => lowlevel}/xc/xc.c | 2 +- .../xen/{ext => lowlevel}/xu/__init__.py | 0 .../{ext => lowlevel}/xu/domain_controller.h | 0 tools/python/xen/{ext => lowlevel}/xu/xu.c | 2 +- tools/python/xen/xend/XendConsole.py | 4 +- tools/python/xen/xend/XendDomain.py | 211 +++++++++++++----- tools/python/xen/xend/XendDomainInfo.py | 39 +++- tools/python/xen/xend/XendNode.py | 4 +- tools/python/xen/xend/server/SrvDaemon.py | 2 +- tools/python/xen/xend/server/channel.py | 4 +- tools/python/xen/xend/server/console.py | 2 +- tools/python/xen/xend/server/messages.py | 2 +- 18 files changed, 208 insertions(+), 128 deletions(-) delete mode 100644 tools/python/xen/ext/xc/Makefile delete mode 100644 tools/python/xen/ext/xc/setup.py rename tools/python/xen/{ext => lowlevel}/__init__.py (100%) rename tools/python/xen/{ext => lowlevel}/xc/xc.c (99%) rename tools/python/xen/{ext => lowlevel}/xu/__init__.py (100%) rename tools/python/xen/{ext => lowlevel}/xu/domain_controller.h (100%) rename tools/python/xen/{ext => lowlevel}/xu/xu.c (99%) diff --git a/.rootkeys b/.rootkeys index 833c2f0cd2..5045bae458 100644 --- a/.rootkeys +++ b/.rootkeys @@ -240,13 +240,11 @@ 40c9c468icGyC5RAF1bRKsCXPDCvsA tools/python/Makefile 40c9c469n2RRwCmjWdjdyyVRWKmgWg tools/python/setup.py 40dc4076hGpwa8-sWRN0jtXZeQJuKg tools/python/xen/__init__.py -40dfd40aMOhnw_cQLve9462UR5yYxQ tools/python/xen/ext/__init__.py -3fbd0a3dTwnDcfdw0-v46dPbX98zDw tools/python/xen/ext/xc/Makefile -3fbd0a40yT6G3M9hMpaz5xTUdl0E4g tools/python/xen/ext/xc/setup.py -3fbd0a42l40lM0IICw2jXbQBVZSdZg tools/python/xen/ext/xc/xc.c -40dc4076St6AmPTmQPrtQ6LGHPxGmw tools/python/xen/ext/xu/__init__.py -40dc4076pVeE1kEEWzcUaNZin65kCA tools/python/xen/ext/xu/domain_controller.h -40dc4076CwBYRTUQDdbdU1L6KcLgSw tools/python/xen/ext/xu/xu.c +40dfd40aMOhnw_cQLve9462UR5yYxQ tools/python/xen/lowlevel/__init__.py +3fbd0a42l40lM0IICw2jXbQBVZSdZg tools/python/xen/lowlevel/xc/xc.c +40dc4076St6AmPTmQPrtQ6LGHPxGmw tools/python/xen/lowlevel/xu/__init__.py +40dc4076pVeE1kEEWzcUaNZin65kCA tools/python/xen/lowlevel/xu/domain_controller.h +40dc4076CwBYRTUQDdbdU1L6KcLgSw tools/python/xen/lowlevel/xu/xu.c 40d8915cyoVA0hJxiBFNymL7YvDaRg tools/python/xen/util/Brctl.py 40dfd40aGqGkiopOOgJxSF4iCbHM0Q tools/python/xen/util/__init__.py 4055ee4dwy4l0MghZosxoiu6zmhc9Q tools/python/xen/util/console_client.py diff --git a/tools/Make.defs b/tools/Make.defs index 051baef2fc..938b6cccb4 100644 --- a/tools/Make.defs +++ b/tools/Make.defs @@ -1,7 +1,7 @@ # -*- mode: Makefile; -*- XEN_HYPERVISOR_IFS = $(XEN_ROOT)/xen/include/hypervisor-ifs XEN_LINUX_INCLUDE = $(XEN_ROOT)/linux-xen-sparse/include -XEN_XU = $(XEN_ROOT)/tools/python/xen/ext/xu -XEN_XC = $(XEN_ROOT)/tools/python/xen/ext/xc +XEN_XU = $(XEN_ROOT)/tools/python/xen/lowlevel/xu +XEN_XC = $(XEN_ROOT)/tools/python/xen/lowlevel/xc XEN_LIBXC = $(XEN_ROOT)/tools/libxc XEN_LIBXUTIL = $(XEN_ROOT)/tools/libxutil diff --git a/tools/python/setup.py b/tools/python/setup.py index 0b8efce0fd..93e7cad00c 100644 --- a/tools/python/setup.py +++ b/tools/python/setup.py @@ -8,7 +8,7 @@ extra_compile_args = [ "-fno-strict-aliasing", "-Wall", "-Werror" ] include_dirs = [ XEN_ROOT + "/xen/include/hypervisor-ifs", XEN_ROOT + "/linux-xen-sparse/include", - XEN_ROOT + "/tools/python/xen/ext/xu", + XEN_ROOT + "/tools/python/xen/lowlevel/xu", XEN_ROOT + "/tools/libxc", XEN_ROOT + "/tools/libxutil", ] @@ -21,28 +21,28 @@ libraries = [ "xc", "xutil" ] xc = Extension("xc", extra_compile_args = extra_compile_args, - include_dirs = include_dirs + [ "xen/ext/xc" ], + include_dirs = include_dirs + [ "xen/lowlevel/xc" ], library_dirs = library_dirs, libraries = libraries, - sources = [ "xen/ext/xc/xc.c" ]) + sources = [ "xen/lowlevel/xc/xc.c" ]) xu = Extension("xu", extra_compile_args = extra_compile_args, - include_dirs = include_dirs + [ "xen/ext/xu" ], + include_dirs = include_dirs + [ "xen/lowlevel/xu" ], library_dirs = library_dirs, libraries = libraries, - sources = [ "xen/ext/xu/xu.c" ]) + sources = [ "xen/lowlevel/xu/xu.c" ]) setup(name = 'xen', version = '2.0', description = 'Xen', packages = ['xen', - 'xen.ext', + 'xen.lowlevel', 'xen.util', 'xen.xend', 'xen.xend.server', 'xen.xm', ], - ext_package = "xen.ext", + ext_package = "xen.lowlevel", ext_modules = [ xc, xu ] ) diff --git a/tools/python/xen/ext/xc/Makefile b/tools/python/xen/ext/xc/Makefile deleted file mode 100644 index 7dc74a1072..0000000000 --- a/tools/python/xen/ext/xc/Makefile +++ /dev/null @@ -1,15 +0,0 @@ - -all: - python setup.py build - -install: all - if [ "$(prefix)" = "" ]; then \ - python setup.py install; \ - elif [ "$(dist)" = "yes" ]; then \ - python setup.py install --home="$(prefix)"; \ - else \ - python setup.py install --root="$(prefix)"; \ - fi - -clean: - rm -rf build *.pyc *.pyo *.o *.a *~ diff --git a/tools/python/xen/ext/xc/setup.py b/tools/python/xen/ext/xc/setup.py deleted file mode 100644 index 8efe5ca1a0..0000000000 --- a/tools/python/xen/ext/xc/setup.py +++ /dev/null @@ -1,19 +0,0 @@ - -from distutils.core import setup, Extension - -module = Extension("xc", - extra_compile_args = ["-fno-strict-aliasing"], - include_dirs = ["../lib", - "../../../xen/include/hypervisor-ifs", - "../../../linux-xen-sparse/include", - "../../xu/lib", - "../../lib" ], - library_dirs = ["../lib", - "../../lib" ], - libraries = ["xc"], - sources = ["Xc.c"]) - -setup(name = "xc", - version = "2.0", - ext_package = "xen.ext", - ext_modules = [module]) diff --git a/tools/python/xen/ext/__init__.py b/tools/python/xen/lowlevel/__init__.py similarity index 100% rename from tools/python/xen/ext/__init__.py rename to tools/python/xen/lowlevel/__init__.py diff --git a/tools/python/xen/ext/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c similarity index 99% rename from tools/python/xen/ext/xc/xc.c rename to tools/python/xen/lowlevel/xc/xc.c index 003e1fad35..9cce7b060d 100644 --- a/tools/python/xen/ext/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -22,7 +22,7 @@ #define PyMODINIT_FUNC DL_EXPORT(void) #endif -#define XENPKG "xen.ext.xc" +#define XENPKG "xen.lowlevel.xc" static PyObject *xc_error, *zero; diff --git a/tools/python/xen/ext/xu/__init__.py b/tools/python/xen/lowlevel/xu/__init__.py similarity index 100% rename from tools/python/xen/ext/xu/__init__.py rename to tools/python/xen/lowlevel/xu/__init__.py diff --git a/tools/python/xen/ext/xu/domain_controller.h b/tools/python/xen/lowlevel/xu/domain_controller.h similarity index 100% rename from tools/python/xen/ext/xu/domain_controller.h rename to tools/python/xen/lowlevel/xu/domain_controller.h diff --git a/tools/python/xen/ext/xu/xu.c b/tools/python/xen/lowlevel/xu/xu.c similarity index 99% rename from tools/python/xen/ext/xu/xu.c rename to tools/python/xen/lowlevel/xu/xu.c index 48c975912d..ae11ce6885 100644 --- a/tools/python/xen/ext/xu/xu.c +++ b/tools/python/xen/lowlevel/xu/xu.c @@ -27,7 +27,7 @@ #include -#define XENPKG "xen.ext.xu" +#define XENPKG "xen.lowlevel.xu" /* Needed for Python versions earlier than 2.3. */ #ifndef PyMODINIT_FUNC diff --git a/tools/python/xen/xend/XendConsole.py b/tools/python/xen/xend/XendConsole.py index 4420c388f2..440b627562 100644 --- a/tools/python/xen/xend/XendConsole.py +++ b/tools/python/xen/xend/XendConsole.py @@ -1,8 +1,8 @@ # Copyright (C) 2004 Mike Wray import socket -import xen.ext.xc -xc = xen.ext.xc.new() +import xen.lowlevel.xc +xc = xen.lowlevel.xc.new() import sxp import XendRoot diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 3aaf080c36..328450a6b5 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -8,7 +8,7 @@ import sys from twisted.internet import defer -import xen.ext.xc; xc = xen.ext.xc.new() +import xen.lowlevel.xc; xc = xen.lowlevel.xc.new() import sxp import XendRoot @@ -36,7 +36,6 @@ class XendDomain: self.xconsole = XendConsole.instance() # Table of domain info indexed by domain id. self.db = XendDB.XendDB(self.dbpath) - #self.domain = {} self.domain_db = self.db.fetchall("") if xroot.get_rebooted(): print 'XendDomain> rebooted: removing all domain info' @@ -45,6 +44,8 @@ class XendDomain: self.initial_refresh() def onVirq(self, event, val): + """Event handler for virq. + """ print 'XendDomain> virq', val self.reap() @@ -102,28 +103,12 @@ class XendDomain: def _new_domain(self, savedinfo, info): """Create a domain entry from saved info. + + savedinfo saved info from the db + info domain info from xen + + returns deferred """ -## console = None -## kernel = None -## id = sxp.child_value(info, 'id') -## dom = int(id) -## name = sxp.child_value(info, 'name') -## memory = int(sxp.child_value(info, 'memory')) -## consoleinfo = sxp.child(info, 'console') -## if consoleinfo: -## consoleid = sxp.child_value(consoleinfo, 'id') -## console = self.xconsole.console_get(consoleid) -## if dom and console is None: -## # Try to connect a console. -## console = self.xconsole.console_create(dom) -## config = sxp.child(info, 'config') -## if config: -## image = sxp.child(info, 'image') -## if image: -## image = sxp.child0(image) -## kernel = sxp.child_value(image, 'kernel') -## dominfo = XendDomainInfo.XendDomainInfo( -## config, dom, name, memory, kernel, console) config = sxp.child_value(savedinfo, 'config') deferred = XendDomainInfo.vm_recreate(config, info) def fn(dominfo): @@ -132,12 +117,23 @@ class XendDomain: return deferred def _add_domain(self, id, info, notify=1): + """Add a domain entry to the tables. + + id domain id + info domain info object + notify send a domain created event if true + """ self.domain[id] = info self.domain_db[id] = info.sxpr() self.sync_domain(id) if notify: eserver.inject('xend.domain.created', id) def _delete_domain(self, id, notify=1): + """Remove a domain from the tables. + + id domain id + notify send a domain died event if true + """ if id in self.domain: if notify: eserver.inject('xend.domain.died', id) del self.domain[id] @@ -146,14 +142,13 @@ class XendDomain: self.db.delete(id) def reap(self): - """Go through the domains looking for ones that have crashed or stopped. + """Look for domains that have crashed or stopped. Tidy them up. """ print 'XendDomain>reap>' domlist = xc.domain_getinfo() casualties = [] for d in domlist: - #print 'dom', d dead = 0 dead = dead or (d['crashed'] or d['shutdown']) dead = dead or (d['dying'] and @@ -163,9 +158,6 @@ class XendDomain: for d in casualties: id = str(d['dom']) print 'XendDomain>reap> died id=', id, d - dominfo = self.domain.get(id) - if not dominfo: continue - dominfo.died() self.domain_destroy(id, refresh=0) print 'XendDomain>reap<' @@ -181,9 +173,6 @@ class XendDomain: doms[id] = d if id not in self.domain: config = None - #image = None - #newinfo = XendDomainInfo.XendDomainInfo( - # config, d['dom'], d['name'], d['mem_kb']/1024, image=image, info=d) deferred = XendDomainInfo.vm_recreate(config, d) def fn(dominfo): self._add_domain(dominfo.id, dominfo) @@ -198,6 +187,10 @@ class XendDomain: self.reap() def refresh_domain(self, id): + """Refresh information for a single domain. + + id domain id + """ dom = int(id) dominfo = xc.domain_getinfo(dom, 1) if dominfo == [] or dominfo[0]['dom'] != dom: @@ -213,17 +206,28 @@ class XendDomain: d.update(dominfo[0]) def domain_ls(self): - # List domains. - # Update info from kernel first. + """Get list of domain ids. + + return domain ids + """ self.refresh() return self.domain.keys() def domains(self): + """Get list of domain objects. + + return domain objects + """ self.refresh() return self.domain.values() def domain_create(self, config): - # Create domain, log it. + """Create a domain from a configuration. + + config configuration + + returns deferred + """ deferred = XendDomainInfo.vm_create(config) def fn(dominfo): self._add_domain(dominfo.id, dominfo) @@ -232,12 +236,19 @@ class XendDomain: return deferred def domain_get(self, id): + """Get up-to-date info about a domain. + + id domain id + returns domain object (or None) + """ id = str(id) self.refresh_domain(id) return self.domain.get(id) def domain_unpause(self, id): - """(Re)start domain running. + """Unpause domain execution. + + id domain id """ dom = int(id) eserver.inject('xend.domain.unpause', id) @@ -245,6 +256,8 @@ class XendDomain: def domain_pause(self, id): """Pause domain execution. + + id domain id """ dom = int(id) eserver.inject('xend.domain.pause', id) @@ -252,6 +265,9 @@ class XendDomain: def domain_shutdown(self, id, reason='poweroff'): """Shutdown domain (nicely). + + id domain id + reason shutdown type: poweroff, reboot, halt """ dom = int(id) if dom <= 0: @@ -263,23 +279,37 @@ class XendDomain: def domain_destroy(self, id, refresh=1): """Terminate domain immediately. + + id domain id + refresh send a domain destroy event if true """ dom = int(id) if dom <= 0: return 0 eserver.inject('xend.domain.destroy', id) - val = xc.domain_destroy(dom=dom) + dominfo = self.domain.get(id) + if dominfo: + val = dominfo.destroy() + else: + val = xc.domain_destroy(dom=dom) if refresh: self.refresh() return val def domain_migrate(self, id, dst): """Start domain migration. + + id domain id """ # Need a cancel too? pass def domain_save(self, id, dst, progress=0): - """Save domain state to file, destroy domain. + """Save domain state to file, destroy domain on success. + Leave domain running on error. + + id domain id + dst destination file + progress output progress if true """ dom = int(id) dominfo = self.domain_get(id) @@ -288,79 +318,140 @@ class XendDomain: vmconfig = sxp.to_string(dominfo.sxpr()) self.domain_pause(id) eserver.inject('xend.domain.save', id) - rc = xc.linux_save(dom=dom, state_file=dst, vmconfig=vmconfig, progress=progress) + try: + rc = xc.linux_save(dom=dom, state_file=dst, + vmconfig=vmconfig, progress=progress) + except: + rc = -1 if rc == 0: self.domain_destroy(id) + else: + self.domain_unpause(id) return rc def domain_restore(self, src, progress=0): """Restore domain from file. + + src source file + progress output progress if true + + returns domain object """ dominfo = XendDomainInfo.vm_restore(src, progress=progress) self._add_domain(dominfo.id, dominfo) return dominfo - #============================================================================ - # Backward compatibility stuff from here on. - def domain_pincpu(self, dom, cpu): + """Pin a domain to a cpu. + + dom domain + cpu cpu number + """ dom = int(dom) return xc.domain_pincpu(dom, cpu) def domain_cpu_bvt_set(self, dom, mcuadv, warp, warpl, warpu): + """Set BVT (Borrowed Virtual Time) scheduler parameters for a domain. + """ dom = int(dom) return xc.bvtsched_domain_set(dom=dom, mcuadv=mcuadv, warp=warp, warpl=warpl, warpu=warpu) def domain_cpu_bvt_get(self, dom): + """Get BVT (Borrowed Virtual Time) scheduler parameters for a domain. + """ dom = int(dom) return xc.bvtsched_domain_get(dom) def domain_cpu_atropos_set(self, dom, period, slice, latency, xtratime): + """Set Atropos scheduler parameters for a domain. + """ dom = int(dom) return xc.atropos_domain_set(dom, period, slice, latency, xtratime) def domain_cpu_atropos_get(self, dom): + """Get Atropos scheduler parameters for a domain. + """ dom = int(dom) return xc.atropos_domain_get(dom) - def domain_vif_ls(self, dom): + def domain_devtype_ls(self, dom, type): + """Get list of device indexes for a domain. + + dom domain + type device type + + returns device indexes + """ dominfo = self.domain_get(dom) if not dominfo: return None - devs = dominfo.get_devices('vif') + devs = dominfo.get_devices(type) return range(0, len(devs)) - def domain_vif_get(self, dom, vif): + def domain_devtype_get(self, dom, type, idx): + """Get a device from a domain. + + dom domain + type device type + idx device index + + returns device object (or None) + """ dominfo = self.domain_get(dom) if not dominfo: return None - return dominfo.get_device_by_index(vif) + return dominfo.get_device_by_index(type, idx) + + def domain_vif_ls(self, dom): + """Get list of virtual network interface (vif) indexes for a domain. + + dom domain + + returns vif indexes + """ + return self.domain_devtype_ls(dom, 'vif') -## def domain_vif_ip_add(self, dom, vif, ip): -## dom = int(dom) -## return xenctl.ip.setup_vfr_rules_for_vif(dom, vif, ip) + def domain_vif_get(self, dom, vif): + """Get a virtual network interface (vif) from a domain. + + dom domain + vif vif index + + returns vif device object (or None) + """ + return self.domain_devtype_get(dom, 'vif', vif) def domain_vbd_ls(self, dom): - dominfo = self.domain_get(dom) - if not dominfo: return [] - devs = dominfo.get_devices('vbd') - return [ sxp.child_value(v, 'dev') for v in devs ] + """Get list of virtual block device (vbd) indexes for a domain. + + dom domain + + returns vbd indexes + """ + return self.domain_devtype_ls(dom, 'vbd') def domain_vbd_get(self, dom, vbd): - dominfo = self.domain_get(dom) - if not dominfo: return None - devs = dominfo.get_devices('vbd') - for v in devs: - if sxp.child_value(v, 'dev') == vbd: - return v - return None + """Get a virtual block device (vbd) from a domain. + + dom domain + vbd vbd index + + returns vbd device (or None) + """ + return self.domain_devtype_get(dom, 'vbd', vbd) def domain_shadow_control(self, dom, op): + """Shadow page control. + + dom domain + op operation + """ dom = int(dom) return xc.shadow_control(dom, op) - #============================================================================ def instance(): + """Singleton constructor. Use this instead of the class constructor. + """ global inst try: inst diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index a7e5aa3b2f..c43dcfe892 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # Copyright (C) 2004 Mike Wray """Representation of a single domain. @@ -16,7 +15,7 @@ import os from twisted.internet import defer -import xen.ext.xc; xc = xen.ext.xc.new() +import xen.lowlevel.xc; xc = xen.lowlevel.xc.new() import xen.util.ip import sxp @@ -333,6 +332,9 @@ def _vm_configure2(val, vm): class XendDomainInfo: """Virtual machine object.""" + STATE_OK = "ok" + STATE_TERMINATED = "terminated" + def __init__(self): self.recreate = 0 self.config = None @@ -351,7 +353,7 @@ class XendDomainInfo: self.blkif_backend = 0 self.netif_backend = 0 #todo: state: running, suspended - self.state = 'running' + self.state = self.STATE_OK #todo: set to migrate info if migrating self.migrate = None @@ -490,21 +492,42 @@ class XendDomainInfo: self.configs.append(val) def destroy(self): - if self.dom <= 0: - return 0 + """Completely destroy the vm. + """ + self.cleanup() + return self.destroy_domain() + + def destroy_domain(self): + """Destroy the vm's domain. + The domain will not finally go away unless all vm + devices have been released. + """ + if self.dom is None: return 0 return xc.domain_destroy(dom=self.dom) - def died(self): - print 'died>', self.dom + def cleanup(self): + """Cleanup vm resources: release devices. + """ + print 'cleanup>', self.dom + self.state = self.STATE_TERMINATED self.release_devices() + def is_terminated(self): + """Check if a domain has been terminated. + """ + return self.state == self.STATE_TERMINATED + def release_devices(self): + """Release all vm devices. + """ print 'release_devices>', self.dom self.release_vifs() self.release_vbds() self.devices = {} def release_vifs(self): + """Release vm virtual network devices (vifs). + """ print 'release_vifs>', self.dom if self.dom is None: return ctrl = xend.netif_get(self.dom) @@ -512,6 +535,8 @@ class XendDomainInfo: ctrl.destroy() def release_vbds(self): + """Release vm virtual block devices (vbds). + """ print 'release_vbds>', self.dom if self.dom is None: return ctrl = xend.blkif_get(self.dom) diff --git a/tools/python/xen/xend/XendNode.py b/tools/python/xen/xend/XendNode.py index 7221785aff..27ea8ef187 100644 --- a/tools/python/xen/xend/XendNode.py +++ b/tools/python/xen/xend/XendNode.py @@ -8,12 +8,12 @@ """ import os -import xen.ext.xc +import xen.lowlevel.xc class XendNode: def __init__(self): - self.xc = xen.ext.xc.new() + self.xc = xen.lowlevel.xc.new() def shutdown(self): return 0 diff --git a/tools/python/xen/xend/server/SrvDaemon.py b/tools/python/xen/xend/server/SrvDaemon.py index c8284dc485..31ace1b84e 100644 --- a/tools/python/xen/xend/server/SrvDaemon.py +++ b/tools/python/xen/xend/server/SrvDaemon.py @@ -23,7 +23,7 @@ from twisted.internet import protocol from twisted.internet import abstract from twisted.internet import defer -from xen.ext import xu +from xen.lowlevel import xu from xen.xend import sxp from xen.xend import PrettyPrint diff --git a/tools/python/xen/xend/server/channel.py b/tools/python/xen/xend/server/channel.py index be98a37fd5..d68f84fa37 100755 --- a/tools/python/xen/xend/server/channel.py +++ b/tools/python/xen/xend/server/channel.py @@ -1,5 +1,5 @@ -import xen.ext.xc; xc = xen.ext.xc.new() -from xen.ext import xu +import xen.lowlevel.xc; xc = xen.lowlevel.xc.new() +from xen.lowlevel import xu from messages import msgTypeName VIRQ_MISDIRECT = 0 # Catch-all interrupt for unbound VIRQs. diff --git a/tools/python/xen/xend/server/console.py b/tools/python/xen/xend/server/console.py index ab8b22e41e..3227dc1b5e 100755 --- a/tools/python/xen/xend/server/console.py +++ b/tools/python/xen/xend/server/console.py @@ -3,7 +3,7 @@ from twisted.internet import reactor from twisted.internet import protocol from twisted.protocols import telnet -from xen.ext import xu +from xen.lowlevel import xu from xen.xend import EventServer eserver = EventServer.instance() diff --git a/tools/python/xen/xend/server/messages.py b/tools/python/xen/xend/server/messages.py index e12d7b6e24..f3257ca832 100644 --- a/tools/python/xen/xend/server/messages.py +++ b/tools/python/xen/xend/server/messages.py @@ -1,6 +1,6 @@ import struct -from xen.ext import xu +from xen.lowlevel import xu DEBUG = 0 -- 2.30.2